package co.com.pd.dao.impl;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;

import co.com.pd.dao.ReservaDaoInt;
import co.com.pd.dao.cfg.HibernateSessionFactory;
import co.com.pd.dtos.ReservaDto;
import co.com.pd.exception.DaoException;

/**
 * 
 * @author Usuario Implementacion para el manejo de la persistecia de la clase
 *         ReservaDao.
 */
public class ReservaDaoImpl implements ReservaDaoInt {

	/**
	 * Guarda el usario para la clase usaurio.
	 */
	@Override
	public void guardar(ReservaDto reservaDto) throws DaoException {

		Session session = null;
		Transaction tx = null;
		/**
		 * creacion de la logica para persistir la reserva del dispositivo
		 */
		try {
			session = HibernateSessionFactory.getInstance().getSession();

			tx = session.beginTransaction();
			session.save(reservaDto);
			tx.commit();

			/**
			 * Manejo de las excepciones
			 */
		} catch (HibernateException e) {
			throw new DaoException(e);
		} finally {
			if (session != null)
				session.close();
		}

	}

	/**
	 * Realizacion de la logica para obtener una unica reserva
	 */
	@Override
	public ReservaDto obtener(String id) throws DaoException {
		Session session = null;
		ReservaDto reservaDto = null;
		/**
		 * Creacion de la logica para obtenes una solo instacia de la reserva
		 * por medio del id
		 */

		try {
			session = HibernateSessionFactory.getInstance().getSession();

			reservaDto = (ReservaDto) session.get(ReservaDto.class, id);

			/**
			 * Manejo de las excepnciones.
			 */
		} catch (HibernateException e) {
			throw new DaoException(e);
		} finally {
			if (session != null)
				session.close();
		}
		return reservaDto;
	}

	/**
	 * Realizacion de la logica para actualizar una reserva por medio del dto
	 * reservaDto
	 */
	@Override
	public void actualizar(ReservaDto reservaDto) {
		Session session = null;
		Transaction tx = null;
		/**
		 * creacion de la logica para la actualizacion de la reserva por medio
		 * del dto reservaDto
		 */
		try {
			session = HibernateSessionFactory.getInstance().getSession();

			tx = session.beginTransaction();
			session.update(reservaDto);
			tx.commit();

			/**
			 * Manejo de las expceciones
			 */
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (session != null)
				session.close();
		}

	}

	/**
	 * Realizacion de la logica para eliminar una reserva
	 */
	@Override
	public void elimnar(ReservaDto reservaDto) {
		Session session = null;
		Transaction tx = null;
		/**
		 * creacion de la logica para eliminar la persistencia de la base de
		 * satos
		 */
		try {
			session = HibernateSessionFactory.getInstance().getSession();

			tx = session.beginTransaction();
			session.delete(reservaDto);
			tx.commit();

			/**
			 * Manejode excepciones
			 */
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (session != null)
				session.close();
		}

	}

}
